// --------------------------------------------------------------------------- // jWebSocket - Copyright (c) 2010 Innotrade GmbH // --------------------------------------------------------------------------- // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published by the // Free Software Foundation; either version 3 of the License, or (at your // option) any later version. // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License // for more details. // You should have received a copy of the GNU Lesser General Public License // along with this program; if not, see <http://www.gnu.org/licenses/lgpl.html>. // --------------------------------------------------------------------------- package org.jwebsocket.android.demo; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.widget.Gallery; import android.widget.ImageView; import android.widget.LinearLayout; /** * * @author aschulze */ public class CanvasActivity extends Activity { LinearLayout mLinearLayout; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); // Create a LinearLayout in which to add the ImageView mLinearLayout = new LinearLayout(this); // get the display metric (width and height) DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); final int width = metrics.widthPixels; final int height = metrics.heightPixels; final Bitmap lBmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); final Canvas lCanvas = new Canvas(lBmp); final ImageView lImgView = new ImageView(this); lImgView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); lImgView.setImageBitmap(lBmp); lImgView.setScaleType(ImageView.ScaleType.CENTER); lImgView.setPadding(0, 0, 0, 0); final Paint bck = new Paint(); bck.setARGB(0xff, 0x80, 0x80, 0x80); lCanvas.drawRect(0, 0, width, height, bck); final Paint p = new Paint(); p.setARGB(0xff, 0xff, 0x00, 0xff); mLinearLayout.addView(lImgView); setContentView(mLinearLayout); lImgView.setOnTouchListener(new OnTouchListener() { // start and end coordinates for a single line float sx, sy, ex, ey; public boolean onTouch(View aView, MotionEvent aME) { Rect lRect = new Rect(); Window lWindow = getWindow(); lWindow.getDecorView().getWindowVisibleDisplayFrame(lRect); int lStatusBarHeight = lRect.top; int lContentViewTop = lWindow.findViewById(Window.ID_ANDROID_CONTENT).getTop(); final int lTitleBarHeight = lContentViewTop - lStatusBarHeight; int lAction = aME.getAction(); float lX = aME.getX(); float lY = aME.getY(); switch (lAction) { case MotionEvent.ACTION_DOWN: ex = lX; ey = lY + lTitleBarHeight; break; case MotionEvent.ACTION_MOVE: sx = ex; sy = ey; ex = lX; ey = lY + lTitleBarHeight; lCanvas.drawLine(sx, sy, ex, ey, p); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: break; } lImgView.invalidate(); return true; } }); } @Override public boolean onCreateOptionsMenu(Menu aMenu) { MenuInflater lMenInfl = getMenuInflater(); lMenInfl.inflate(R.menu.canvas_menu, aMenu); return true; } }